﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Sispe.Entities;

namespace Sispe.Repository
{
    public interface IProyectoRepository
    {
        List<PROYECTO> GetAllFromProyectos();
        List<PROYECTO> GetAllFromProyectosByDescripcion(string descripcion);
        //--List<PROYECTO> GetAllFromProyectosByFechas(DateTime fechaInicio, DateTime fechFin);
        List<PROYECTO> GetAllProyectosVigentes();
        List<PROYECTO> GetAllProyectosByCliente(string descripcion);
        List<PROYECTO> GetAllProyectosByUbicacion(string ubicacion);
        List<PROYECTO> GetAllFromProyectosByClienteByFecha(string descripcion, DateTime fecIni, DateTime fecFin);
        List<PROYECTO> GetAllFromProyectosByUbicacionByFecha(string ubicacion, DateTime fecIni, DateTime fecFin);
        List<PROYECTO> GetAllFromProyectosByFecha(DateTime fecIni, DateTime fecFin);
        List<PROYECTO> GetAllFromProyectosByDescripcionByFecha(string descripcion, DateTime fecIni, DateTime fecFin);
        List<PROYECTO> GetAllFromProyectoByNombreByCliente(string proyecto, string cliente);
        List<PROYECTO> GetAllFromProyectoByNombreByClienteByFecha(string proyecto, string cliente, DateTime fecIni, DateTime fecFin);
        List<PROYECTO> GetAllFromProyectoByNombreByUbicacion(string proyecto, string ubicacion);
        List<PROYECTO> GetAllFromProyectoByNombreByUbicacionByFecha(string proyecto, string ubicacion, DateTime fecIni, DateTime fecFin);
        List<PROYECTO> GetAllFromProyectoByNombreByClienteBYUbicacion(string proyecto, string cliente, string ubicacion);
        List<PROYECTO> GetAllFromProyectoByNombreByClienteBYUbicacionByFecha(string proyecto, string cliente, string ubicacion, DateTime fecIni, DateTime fecFin);
        List<PROYECTO> GetAllFromProyectosByCLienteByUbicacion(string cliente, string ubicacion);
        List<PROYECTO> GetAllFromProyectosByCLienteByUbicacionByFecha(string cliente, string ubicacion, DateTime fecIni, DateTime fecFin);


        List<PROYECTO> GetAllFromProyectosVigentesByFecha(DateTime fecIni, DateTime fecFin);
        List<PROYECTO> GetAllFromProyectoVigentessByDescripcionByFecha(string descripcion, DateTime fecIni, DateTime fecFin);
        List<PROYECTO> GetAllFromProyectosVigentesByClienteByFecha(string descripcion, DateTime fecIni, DateTime fecFin);
        List<PROYECTO> GetAllFromProyectosVigentesByUbicacionByFecha(string ubicacion, DateTime fecIni, DateTime fecFin);
        List<PROYECTO> GetAllFromProyectoVigentessByDescripcion(string descripcion);
        List<PROYECTO> GetAllFromProyectosVigentesByCliente(string descripcion);
        List<PROYECTO> GetAllFromProyectosVigentesByUbicacion(string ubicacion);
        
        List<PROYECTO> GetAllFromProyectosVigentesByNombreByCliente(string proyecto, string cliente);
        List<PROYECTO> GetAllFromProyectosVigentesByNombreByClienteByFecha(string proyecto, string cliente, DateTime fecIni, DateTime fecFin);
        List<PROYECTO> GetAllFromProyectosVigentesByNombreByUbicacion(string proyecto, string ubicacion);
        List<PROYECTO> GetAllFromProyectosVigentesByNombreByUbicacionByFecha(string proyecto, string ubicacion, DateTime fecIni, DateTime fecFin);
        List<PROYECTO> GetAllFromProyectsVigentesoByNombreByClienteBYUbicacion(string proyecto, string cliente, string ubicacion);
        List<PROYECTO> GetAllFromProyectosVigentesByNombreByClienteBYUbicacionByFecha(string proyecto, string cliente, string ubicacion, DateTime fecIni, DateTime fecFin);
        List<PROYECTO> GetAllFromProyectosVigentesByCLienteByUbicacion(string cliente, string ubicacion);
        List<PROYECTO> GetAllFromProyectosVigentesByCLienteByUbicacionByFecha(string cliente, string ubicacion, DateTime fecIni, DateTime fecFin);

        PROYECTO GetFromProyectoById(Int32 id);
        PROYECTO GetFromProyectoByCodigo(string codigo);

        void AddProyecto(PROYECTO proyecto);
        void UpdateProyecto(PROYECTO proyecto);
        void DeleteProyecto(Int32 id);

        bool ExisteDuplicidad(string nombreProyecto, string codigo, Int32 id);
        bool GetFromProyectoByClienteById(Int32 idProy);
        bool GetFromProyectoByUbicacionProyectoById(Int32 idUbicacion);
        
    }
}
